/**
 @Description: git-commit规范配置
 @Document: https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md
 */
/**
 * @explain
 * [Header] Header的部分只有一行,包括三个字段: type(必需), scope(可选), subject(必需)
 *    type(必需) commit的类别 在type-enum中规定允许的类型
 *    scope(可选) commit影响的范围，如功能模块，或者版本号
 *    subject(必需) 简短的描述，用于说明本次提交的简要内容
 * [Body] Body 部分是对本次 commit 的详细描述，可以分成多行。
 * [Footer] Footer 用于以下两种情况
 *    1.破坏性修改(内容应该以BREAKING CHANGE开头)
 *    2.项目关闭issue(通常是开源项目,需要在内容中描述关闭了哪个issue)
 *
 */
/**
 * @插件推荐
 * webstorm:  Git Commit Template
 * VSCode:    git-commit-plugin
 */

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'header-max-length': [2, 'always', 50], // 消息头最大长度50个字符
    'type-enum': [
      2,
      'always',
      [
        'init', // 项目初始化
        'feat', // 添加新特性
        'fix', // 修复bug
        'docs', // 仅仅文档修改
        'style', // 仅仅修改了空格, 格式缩进, 逗号等等, 不改变代码逻辑
        'refactor', // 代码重构, 没有加新功能或者修复bug
        'perf', // 优化相关，比如提升性能、体验
        'test', // 测试用例修改
        'build', // 依赖相关的内容
        'ci', // ci配置相关, 例如对 k8s, docker的配置文件的修改
        'chore', // 改变构建流程、或者增加依赖库、工具等
        'revert' // 回滚到上一个版本
      ]
    ],
    'type-case': [2, 'always', 'lower-case'], // type只能小写
    'type-empty': [2, 'never'], // 必须选择提交类型
    'scope-empty': [0], // 影响范围非必填
    'scope-case': [0], // 不校验更改范围大小写
    'scope-min-length': [2, 'always', 3], // 影响范围最少3个字符
    'scope-max-length': [2, 'always', 20], // 影响范围最多20个字符
    'subject-empty': [2, 'never'], // 概述必填
    'subject-min-length': [2, 'always', 3], // 概述最小3个字符
    'subject-max-length': [2, 'always', 30], // 概述最大长度30个字符
    'subject-case': [0], // 不校验概述大小写
    'body-leading-blank': [2, 'always'], // body前需要一个空行
    'body-empty': [0], // 必须填写message详细内容
    'body-min-length': [2, 'always', 5], // body最少5个字符
    'body-max-length': [2, 'always', 200], // body最多200个字符
    'body-case': [0], // 不校验body的大小写
    'footer-empty': [0], // footer非必填
    'footer-max-length': [2, 'always', 50] // footer最大长度不能超过50个字符
  }
}
